<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      //   function Person(name, age) {
      //     this.name = name;
      //     this.age = age;
      //   }
      //   Person.prototype.fn = function () {
      //     console.log("fn");
      //   };
      //   let zhangsan = new Person("张三", 20);

      //   console.log(zhangsan);
      // 原型：prototype

      // 1.原型是一个对象
      // function Person(name,age){
      //     this.name = name;
      //     this.age = age;
      // }
      // Person.prototype.fn = function(){
      //     console.log("fn");
      // }
      // Person.prototype.fn2 = function(){
      //     console.log("fn2");
      // }

      // console.log(typeof Person.prototype);

      // 2.2种原型 ：显示原型（实例化之前） 和隐式原型（实例化之后）[[Prototype]] -->__proto__：
      // __proto__获取或者设置实例化之后的原型，不推荐；
      // _this  _str :一般是私有属性；
      // function Person(name,age){
      //     this.name = name;
      //     this.age = age;
      // }
      // // 构造函数里的原型被称为显示原型；
      // Person.prototype.fn = function(){
      //     console.log("fn");
      // }
      // Person.prototype.fn2 = function(){
      //     console.log("fn2");
      // }

      // let zhangsan  = new Person("张三",20);
      // 要获取隐式原型；
      //    var res =  Object.getPrototypeOf(zhangsan);
      //    console.log(res);
      // 设置隐式原型；
      // Object.setPrototypeOf(zhangsan,{height:"178cm"});
      // console.log(zhangsan);

      // console.log(Person.prototype===zhangsan.__proto__);

      // zhangsan.__proto__.fn3 = function(){
      //     console.log("fn3")
      // }
      // console.log(zhangsan);

      // 3.对象是由 自身属性和方法 + 原型的属性和方法共同构成；

      function Person(name, age) {
        this.name = name;
        this.age = age;
      }
      // 构造函数里的原型被称为显示原型；
      Person.prototype.fn = function () {
        console.log("fn");
      };
      Person.prototype.fn2 = function () {
        console.log("fn2");
      };

      let zhangsan = new Person("张三", 20);
      // console.log(zhangsan);

      zhangsan.fn();
      zhangsan.fn2();
    </script>
  </body>
</html>
